﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Odbc;
using WLMCoreLibrary;
using System.Data;
using System.Web;
using System.Configuration;
using System.Security;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;
using MiWebSite_Core;

namespace MWS_AddDirectory
{
    [Serializable]
    [XmlType("Anuncio")]
    public class Anuncio : BaseClass
    {

       
       

        #region public properties

        [XmlAttribute()]
        public int IdComunidad {get;set; }
        [XmlAttributeAttribute()]
        public String URL {get;set; }
        [XmlAttributeAttribute()]
        public String AddURL { get { return id + "/" + URL + "/"; } set { } }
        [XmlAttributeAttribute()]
        public String AddURLEdicion { get { return id + "/" + URL + "/editar/"; } set { } }
        [XmlAttributeAttribute()]
        public String nombre {get;set; }
        [XmlAttributeAttribute()]
        public String direccion {get;set; }
        [XmlAttributeAttribute()]
        public String colonia {get;set; }
        [XmlAttributeAttribute()]
        public String municipio {get;set; }
        [XmlAttributeAttribute()]
        public String estado {get;set; }
        [XmlAttributeAttribute()]
        public String CP {get;set; }
        [XmlAttributeAttribute()]
        public String telefono {get;set; }
        [XmlAttributeAttribute()]
        public String fax {get;set; }
        [XmlAttributeAttribute()]
        public String email {get;set; }
        [XmlAttributeAttribute()]
        public String website {get;set; }
        [XmlAttributeAttribute()]
        public String horario {get;set; }        
        public String descripcionMini {get;set; }
        public String descripcionCompleta {get;set; }
        [XmlAttributeAttribute()]
        public int comentarios {get;set; }
        [XmlAttributeAttribute()]
        public Boolean activo {get;set; }
        [XmlAttributeAttribute()]
        public DateTime PagadoHasta {get;set; }
        [XmlAttributeAttribute()]
        public int idImagen {get;set; }
        [XmlAttributeAttribute()]
        public Boolean admitirComentarios {get;set; }
        [XmlAttributeAttribute()]
        public int idCliente {get;set; }
        [XmlAttributeAttribute()]
        public int idTipoAnuncio {get;set; }
        [XmlAttributeAttribute()]
        public int idSubTipoAnuncio {get;set; }
        [XmlAttributeAttribute()]
        public int mostrados {get;set; }
        [XmlAttributeAttribute()]
        public String mapa {get;set; }
        [XmlAttributeAttribute()]
        public int idContrato {get;set; }
        [XmlAttributeAttribute()]
        public int idDominio {get;set; }
        [XmlAttributeAttribute()]
        public String video {get;set; }
        [XmlAttributeAttribute()]
        public int idPromotor {get;set; }
        [XmlAttributeAttribute()]
        public Decimal precio {get;set; }
        [XmlIgnore()]
        public int idMarca {get;set; }
        [XmlIgnore()]
        public int idModelo {get;set; }
        [XmlIgnore()]
        public int ano {get;set; }
        [XmlAttribute()]
        public double Latitud {get;set; }
        [XmlAttribute()]
        public double Longitud {get;set; }
        [XmlAttributeAttribute()]
        public int idLogotipo {get;set; }
        [XmlAttributeAttribute()]
        public String twitter
        {
           get;set;
  
        }
        [XmlAttributeAttribute()]
        public String facebook
        {
           get;set;
   
        }
        [XmlIgnore()]
        public String vestiduras {get;set; }
        public MiWebSiteMediaImages Logotipo {get;set; }
        [XmlIgnore()]
        public MiWebSiteMediaImages Imagen {get;set; }
        [XmlElement("Imagen")]
        public List<MiWebSiteMediaImages> Imagenes {get;set; }
        public List<Tag> Tags {get;set; }
        public List<Categoria> Categorias { get; set; }
        public List<Anuncio> Relacionados {get;set; }
        [XmlAttributeAttribute()]
        public String FullURL { get {return "http://"+ DeCurrentDomain.SubDomain+"."+DeCurrentDomain.CurrentDomainName +"/"+id+"/"+URL+"/"; } set { } }
        private string _listaCategorias;
        [XmlIgnore()]
        public string ListaCategorias
        {
            get
            {
                StringBuilder salida = new StringBuilder();
                int x = 0;
                foreach (Categoria Cat in Categorias)
                {
                    salida.Append("<a href='http://" + Cat.SystemName + "." + DeCurrentDomain.DomainName + "' title=\"Muestra la Categoria '" + Cat.nombreCategoria + "' de el directorio de Negocios\">" + Cat.nombreCategoria + "</a>");
                    x++;
                    if (x != Categorias.Count)
                        salida.Append(", ");
                }
                return salida.ToString();
            }
            set { _listaCategorias = value; }
        }
        private string _listaTags;
        [XmlIgnore()]
        public string ListaTags
        {
            get
            {
                StringBuilder salida = new StringBuilder();
                int x = 0;
                foreach (Tag Tag in Tags)
                {
                    salida.Append("<a href='/clasificado-por/" + Tag.SystemName + ".aspx' title=\"Muestra un listado de los Negocios del Directorio Clasificados con la etiqueta '" + Tag.nombreTag + "'\">" + Tag.nombreTag + "</a>");
                    x++;
                    if (x != 
                        Tags.Count)
                        salida.Append(", ");
                }
                return salida.ToString();
            }
            set { _listaTags = value; }

        }

        [XmlIgnore()]
        public string ListaTagsPlano
        {
            get
            {
                StringBuilder salida = new StringBuilder();
                int x = 0;
                foreach (Tag Tag in Tags)
                {
                    salida.Append(Tag.nombreTag);
                    x++;
                    if (x != Tags.Count)
                        salida.Append(", ");
                }
                return salida.ToString();
            }

        }

        [XmlIgnore()]
        public string ListaCategoriasPlano
        {
            get
            {
                StringBuilder salida = new StringBuilder();
                int x = 0;
                foreach (Categoria Cat in Categorias)
                {
                    salida.Append(Cat.nombreCategoria);
                    x++;
                    if (x != Categorias.Count)
                        salida.Append(", ");
                }
                return salida.ToString();
            }
        }
        #endregion
        [XmlElement("Cliente")]
 public Cliente cliente
        {
           get;set;

        }
  
        public List<Cupon> Cupones
        {
           get;set;
    
        }

        

        #region constructors
        public Anuncio()
        {
        }

        public Anuncio(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("ANUNCIO");
            string queryString = "";
            queryString = "SELECT * FROM ANUNCIO WHERE id='" + id + "'";
            GetRecord(queryString);
            GUID = Guid.NewGuid();
        }

        public Anuncio(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM ANUNCIO WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
            Categorias = new CategoriaCollection(this, ref ConexionDB).Elementos;
            Tags = new TagCollection(this, ref ConexionDB).Elementos;
            cargarDatosCompletos();
        }

        public Anuncio(int registryId,bool loadRelated, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM ANUNCIO WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
            Categorias = new CategoriaCollection(this, ref ConexionDB).Elementos;
            Tags = new TagCollection(this, ref ConexionDB).Elementos;
            cargarDatosCompletos();
            if (loadRelated)
            {
                Relacionados = new List<Anuncio>();
            }
        }

        public Anuncio(Guid guidAnuncio, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM ANUNCIO WHERE GUID='" + guidAnuncio.ToString() + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
            Categorias = new CategoriaCollection(this, ref ConexionDB).Elementos;
            Tags = new TagCollection(this, ref ConexionDB).Elementos;
            cargarDatosCompletos();
        }

        public Anuncio(string urlAnuncio, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM ANUNCIO WHERE URL='" + urlAnuncio + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
            Categorias = new CategoriaCollection(this, ref ConexionDB).Elementos;
            Tags = new TagCollection(this, ref ConexionDB).Elementos;
            cargarDatosCompletos();
        }

        public Anuncio(DataRow dataRow, ref dbConnector ConexionDB)
        {

            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
            Categorias = new CategoriaCollection(this, ref ConexionDB).Elementos;
            Tags = new TagCollection(this, ref ConexionDB).Elementos;
            cargarDatosCompletos();
        }

        private void cargarDatosCompletos()
        {
            if (idTipoAnuncio >= 1)
            {
                if (idImagen != 0)
                {
                    if (idLogotipo != 0)
                        Logotipo = new MiWebSiteMediaImages(idLogotipo, ref ConexionDBInterna);
                    if (idImagen != 0)
                        Imagen = new MiWebSiteMediaImages(idImagen, ref ConexionDBInterna);
                    Imagenes = new List<MiWebSiteMediaImages>();
                    Imagenes.Add(Imagen);
                    MiWebSiteMediaImagesCollection listaImagenes = new MiWebSiteMediaImagesCollection(id,true, ref ConexionDBInterna);
                    foreach (MiWebSiteMediaImages img in listaImagenes.Elementos)
                    {
                        Imagenes.Add(img);
                    }
                }
                Cupones = new List<Cupon>();
                foreach(Cupon cup in (new CuponCollection(this,ref ConexionDBInterna) ).Elementos)
                {
                   // descripcionMini += cup.fechaVencimiento.CompareTo(DateTime.Now);
                    if(cup.fechaActivacion.CompareTo(DateTime.Now)==-1 && cup.fechaVencimiento.CompareTo(DateTime.Now)==1)
                        Cupones.Add(cup);
                }
            }

        }
        #endregion

        #region public methods
        //public void PopularListasXML()
        //{
        //    listaCategoriasXML = new List<DeMexicoCategoria>();
        //    listaTagsXML = new List<DeMexicoTag>();
        //    foreach (DeMexicoCategoria cat in Categorias)
        //        listaCategoriasXML.Add(cat);
        //    foreach (DeMexicoTag tag in Tags)
        //        listaTagsXML.Add(tag);
        //}

        /// <summary>
        /// Publica la informacion del anuncio en el twitter relacionado al dominio actual
        /// </summary>
        /// <returns>regresa true si el twit se publico correctamente</returns>
        public bool PublicarEnTwitter()
        {

            try
            {
                if (DeCurrentDomain.oauth_token != "")
                {
                    Twitter tw = new Twitter();
                    string shorURL = Bitly.Shortener(FullURL);
                    AnuncioFrases frase = new AnuncioFrases(1, true, ref ConexionDBInterna);
                    if (frase.id != 0)
                    {
                        tw.Update(frase.frase.Replace("{CIUDAD}", DeCurrentDomain.Ciudad).Replace("{CATEGORIA}", Categorias[0].nombreCategoria).Replace("{ANUNCIANTE}", nombre).Replace("{LINK}", shorURL));
                        return true;
                    }
                    return false;
                }
            }
            catch (Exception ex)
            {                           
            }
            return false;
        }

        /// <summary>
        /// Envia un Email al Cliente informandole de la alta de un nuevo anuncio
        /// </summary>
        /// <returns></returns>
        public string EnviarNuevoPorMail()
        {
            try
            {
                this.cliente = new Cliente(idCliente, ref ConexionDBInterna);
                string cuerpoEmail = WLMFunctions.TransformXML(this, "http://www." + DeCurrentDomain.DomainName + "/xsl/Templates/Anuncios/NuevoAnuncio.xslt",FuncionesDirectorio.GetTransformationParameters());
                return FuncionesDirectorio.EnviarEmail("info@" + DeCurrentDomain.DomainName, "Directorio de " + DeCurrentDomain.Ciudad, this.cliente.email, cliente.Nombre + " " + cliente.Apellidos, "Nuevo Anuncio en Directorio de " + DeCurrentDomain.Ciudad, cuerpoEmail);
            }
            catch (Exception ex)
            {
                return "Error" + ex.Message +" "+ ex.StackTrace;
            }
        }

        /// <summary>
        /// Envia un Email al Cliente informandole de la La actualizacion de su anuncio en el directorio
        /// </summary>
        /// <returns></returns>
        public string EnviarUpdatePorMail()
        {
            try
            {
                this.cliente = new Cliente(idCliente, ref ConexionDBInterna);
                string cuerpoEmail = WLMFunctions.TransformXML(this, "http://www." + DeCurrentDomain.DomainName + "/xsl/Templates/Anuncios/UpdateAnuncio.xslt", FuncionesDirectorio.GetTransformationParameters());
                return FuncionesDirectorio.EnviarEmail("info@" + DeCurrentDomain.DomainName, "Directorio de " + DeCurrentDomain.Ciudad, this.cliente.email, cliente.Nombre + " " + cliente.Apellidos, "Nuevo Anuncio en Directorio de " + DeCurrentDomain.Ciudad, cuerpoEmail);
            }
            catch (Exception ex)
            {
                return "Error" + ex.Message + " " + ex.StackTrace;
            }
        }


        public void Save(bool GuardarTagsCats)
        {
            this.UpdateBind();
            if (GuardarTagsCats)
            {
                CheckCats();
                CheckTags();
            }
        }


        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM ANUNCIO WHERE id='" + id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion


        #region Private Methods

        private void CheckTags()
        {
            if (ListaTags != null && ListaTags != "")
            {
                Tags = new List<Tag>();
                ConexionDBInterna.ExecuteCommand("DELETE FROM DIRECTORIOTAG2DIR WHERE idDir='" + id + "'");
                string[] arregloTags = ListaTags.Split(',');
                foreach (string tagActual in arregloTags)
                {
                    int temp;
                    string tagActualLimpio = tagActual.Trim();
                    if (!WLMFunctions.TryParseToInt(tagActualLimpio, out temp))
                    {
                        if (tagActualLimpio != "")
                        {
                            Tag tag = new Tag(tagActualLimpio, false, ref ConexionDBInterna);
                            if (tag.id == 0)
                                tag = new Tag(ref ConexionDBInterna);
                            tag.nombreTag = tagActualLimpio;
                            tag.SystemName = MiWebSiteFunctions.tituloaPostName(tagActualLimpio);
                            tag.Save();
                            temp = tag.id;
                            // tag.Dispose();
                        }
                    }

                    Tag nuevoTag = new Tag(temp, ref ConexionDBInterna);
                    if (!Tags.Contains(nuevoTag))
                    {
                        Tag2Add tag2 = new Tag2Add(ref ConexionDBInterna);
                        tag2.idDir = id;
                        tag2.idTag = nuevoTag.id;
                        tag2.Save();
                        Tags.Add(nuevoTag);
                    }
                    else
                        nuevoTag.Dispose();
                }
                string consultaActualizacion = "insert into dominiotagcatsuma (idDominio,idCategoria,idTag,total) " +
                    "(SELECT '"+DeCurrentDomain.IdentificadorDominio+"','0',Tags.id, " +
                    "(select sum(1) FROM anuncio A  " +
                    "LEFT JOIN anuncio2dominio A2D ON A2D.idAnuncio=A.id AND A2D.idDominio="+DeCurrentDomain.IdentificadorDominio+" " +
                    "LEFT JOIN directorioTag2Dir T2D ON T2D.idDir=A.id " +
                    "LEFT JOIN directorioTags T on T.id=T2D.idTag  " +
                    "WHERE T.id=Tags.id ORDER BY T.id) " +
                    "FROM directorioTags Tags ORDER BY nombreTag)";
                ConexionDBInterna.ExecuteCommand(consultaActualizacion);
                
            }

        }

        private void CheckCats()
        {
            if (ListaCategorias != null && ListaCategorias != "")
            {
                Categorias = new List<Categoria>();
                ConexionDBInterna.ExecuteCommand("DELETE FROM DIRECTORIOCAT2DIR WHERE  idDir='" + id + "'");
                string[] arregloTags = ListaCategorias.Split(',');
                foreach (string tagActual in arregloTags)
                {
                    string catActualLimpio = tagActual.Trim();
                    int temp;
                    if (!WLMFunctions.TryParseToInt(catActualLimpio, out temp))
                    {
                        if (catActualLimpio != "")
                        {
                            Categoria cat = new Categoria(catActualLimpio, false, ref ConexionDBInterna);
                            if (cat.id == 0)
                                cat = new Categoria(ref ConexionDBInterna);
                            cat.nombreCategoria = catActualLimpio;
                            cat.SystemName = MiWebSiteFunctions.tituloaPostName(catActualLimpio).Replace("-", "");
                            cat.Save();
                            temp = cat.id;
                            cat.Dispose();
                        }
                    }

                    Categoria newCat = new Categoria(temp, ref ConexionDBInterna);
                    if (!Categorias.Contains(newCat))
                    {
                        Cat2Add cat2 = new Cat2Add(ref ConexionDBInterna);
                        cat2.idDir = id;
                        cat2.idCat = newCat.id;
                        cat2.Save();
                        Categorias.Add(newCat);
                    }
                    else
                    {
                        newCat.Dispose();
                    }
                }
                string consultaActualizacion = "insert into dominiotagcatsuma (idDominio,idCategoria,idTag,total) " +
                    "(SELECT '" + DeCurrentDomain.IdentificadorDominio + "',id,0, " +
                    "(select sum(1) FROM anuncio A " +
                    "LEFT JOIN anuncio2dominio A2D ON A2D.idAnuncio=A.id AND A2D.idDominio=" + DeCurrentDomain.IdentificadorDominio + " " +
                    "LEFT JOIN directorioCat2Dir C2D ON C2D.idDir=A.id " +
                    "LEFT JOIN directoriocats C on C.id=C2D.idCat  " +
                    "WHERE C.id=Cat.id ORDER BY C.id) " +
                    "FROM directoriocats Cat ORDER BY nombreCategoria)";
                ConexionDBInterna.ExecuteCommand(consultaActualizacion);
            }

        }

        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                    fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]); if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion"))) fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]); if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion"))) idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];

                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("GUID")))
                    if (reader["GUID"].ToString() != "")
                        GUID = new Guid(reader["GUID"].ToString());
                if (!reader.IsDBNull(reader.GetOrdinal("URL")))
                    URL = (System.String)reader["URL"];
                if (!reader.IsDBNull(reader.GetOrdinal("nombre")))
                    nombre = (System.String)reader["nombre"];
                if (!reader.IsDBNull(reader.GetOrdinal("direccion")))
                    direccion = (System.String)reader["direccion"];
                if (!reader.IsDBNull(reader.GetOrdinal("colonia")))
                    colonia = (System.String)reader["colonia"];
                if (!reader.IsDBNull(reader.GetOrdinal("municipio")))
                    municipio = (System.String)reader["municipio"];
                if (!reader.IsDBNull(reader.GetOrdinal("estado")))
                    estado = (System.String)reader["estado"];
                if (!reader.IsDBNull(reader.GetOrdinal("CP")))
                    CP = (System.String)reader["CP"];
                if (!reader.IsDBNull(reader.GetOrdinal("telefono")))
                    telefono = (System.String)reader["telefono"];
                if (!reader.IsDBNull(reader.GetOrdinal("fax")))
                    fax = (System.String)reader["fax"];
                if (!reader.IsDBNull(reader.GetOrdinal("email")))
                    email = (System.String)reader["email"];
                if (!reader.IsDBNull(reader.GetOrdinal("website")))
                    website = (System.String)reader["website"];
                if (!reader.IsDBNull(reader.GetOrdinal("horario")))
                    horario = (System.String)reader["horario"];
                if (!reader.IsDBNull(reader.GetOrdinal("descripcionMini")))
                    descripcionMini = (System.String)reader["descripcionMini"];
                if (!reader.IsDBNull(reader.GetOrdinal("descripcionCompleta")))
                    descripcionCompleta = (System.String)reader["descripcionCompleta"];
                if (!reader.IsDBNull(reader.GetOrdinal("comentarios")))
                    comentarios = (System.Int32)reader["comentarios"];
                if (!reader.IsDBNull(reader.GetOrdinal("activo")))
                    activo = Convert.ToBoolean(reader["activo"]);
                if (!reader.IsDBNull(reader.GetOrdinal("pagadoHasta")))
                    PagadoHasta = Convert.ToDateTime(reader["pagadoHasta"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idImagen")))
                    idImagen = (System.Int32)reader["idImagen"];
                if (!reader.IsDBNull(reader.GetOrdinal("admitirComentarios")))
                    admitirComentarios = Convert.ToBoolean(reader["admitirComentarios"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idCliente")))
                    idCliente = (System.Int32)reader["idCliente"];
                if (!reader.IsDBNull(reader.GetOrdinal("idTipoAnuncio")))
                    idTipoAnuncio = (System.Int32)reader["idTipoAnuncio"];
                if (!reader.IsDBNull(reader.GetOrdinal("idSubTipoAnuncio")))
                    idSubTipoAnuncio = (System.Int32)reader["idSubTipoAnuncio"];
                if (!reader.IsDBNull(reader.GetOrdinal("mostrados")))
                    mostrados = (System.Int32)reader["mostrados"];
                if (!reader.IsDBNull(reader.GetOrdinal("mapa")))
                    mapa = (System.String)reader["mapa"];
                if (!reader.IsDBNull(reader.GetOrdinal("idContrato")))
                    idContrato = (System.Int32)reader["idContrato"];
                if (!reader.IsDBNull(reader.GetOrdinal("idDominio")))
                    idDominio = (System.Int32)reader["idDominio"];
                if (!reader.IsDBNull(reader.GetOrdinal("video")))
                    video = (System.String)reader["video"];
                if (!reader.IsDBNull(reader.GetOrdinal("idPromotor")))
                    idPromotor = (System.Int32)reader["idPromotor"];
                if (!reader.IsDBNull(reader.GetOrdinal("precio")))
                    precio = (System.Decimal)reader["precio"];
                if (!reader.IsDBNull(reader.GetOrdinal("idMarca")))
                    idMarca = (System.Int32)reader["idMarca"];
                if (!reader.IsDBNull(reader.GetOrdinal("idModelo")))
                    idModelo = (System.Int32)reader["idModelo"];
                if (!reader.IsDBNull(reader.GetOrdinal("ano")))
                    ano = (System.Int32)reader["ano"];
                if (!reader.IsDBNull(reader.GetOrdinal("vestiduras")))
                    vestiduras = (System.String)reader["vestiduras"];
                if (!reader.IsDBNull(reader.GetOrdinal("idComunidad")))
                    IdComunidad = (System.Int32)reader["idComunidad"];
                if (!reader.IsDBNull(reader.GetOrdinal("lat")))
                    Latitud = (System.Double)reader["lat"];
                if (!reader.IsDBNull(reader.GetOrdinal("lon")))
                    Longitud = (System.Double)reader["lon"];
                if (!reader.IsDBNull(reader.GetOrdinal("idLogotipo")))
                    idLogotipo = (System.Int32)reader["idLogotipo"];
                if (!reader.IsDBNull(reader.GetOrdinal("twitter")))
                    twitter = (System.String)reader["twitter"];
                if (!reader.IsDBNull(reader.GetOrdinal("facebook")))
                    facebook = (System.String)reader["facebook"];
            }
        }

        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                if (dataRow["id"] != null)
                    id = (System.Int32)dataRow["id"];
                if (dataRow["fechaCreacion"] != null)
                    fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
                if (dataRow["fechaModificacion"] != null)
                    fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
                if (dataRow["idUsuario"] != null)
                    idUsuario = (System.Int32)dataRow["idUsuario"];
                if (dataRow["idUsuarioModificacion"] != null)
                    idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
                if (dataRow["GUID"] != null)
                    GUID = new Guid(dataRow["GUID"].ToString());
                if (dataRow["URL"] != null)
                    URL = (System.String)dataRow["URL"];
                if (dataRow["nombre"] != null)
                    nombre = (System.String)dataRow["nombre"];
                if (dataRow["direccion"] != null)
                    direccion = (System.String)dataRow["direccion"];
                if (dataRow["colonia"] != null)
                    colonia = (System.String)dataRow["colonia"];
                if (dataRow["municipio"] != null)
                    municipio = (System.String)dataRow["municipio"];
                if (dataRow["estado"] != null)
                    estado = (System.String)dataRow["estado"];
                if (dataRow["CP"] != null)
                    CP = (System.String)dataRow["CP"];
                if (dataRow["telefono"] != null)
                    telefono = (System.String)dataRow["telefono"];
                if (dataRow["fax"] != null)
                    fax = (System.String)dataRow["fax"];
                if (dataRow["email"] != null)
                    email = (System.String)dataRow["email"];
                if (dataRow["website"] != null)
                    website = (System.String)dataRow["website"];
                if (dataRow["horario"] != null)
                    horario = (System.String)dataRow["horario"];
                if (dataRow["descripcionMini"] != null)
                    descripcionMini = (System.String)dataRow["descripcionMini"];
                if (dataRow["descripcionCompleta"] != null)
                    descripcionCompleta = (System.String)dataRow["descripcionCompleta"];
                if (dataRow["comentarios"] != null)
                    comentarios = (System.Int32)dataRow["comentarios"];
                if (dataRow["activo"] != null)
                    activo = Convert.ToBoolean(dataRow["activo"]);
                if (dataRow["PagadoHasta"] != null)
                    PagadoHasta = (System.DateTime)dataRow["PagadoHasta"];
                if (dataRow["idImagen"] != null)
                    idImagen = (System.Int32)dataRow["idImagen"];
                if (dataRow["admitirComentarios"] != null)
                    admitirComentarios = Convert.ToBoolean(dataRow["admitirComentarios"]);
                if (dataRow["idCliente"] != null)
                    idCliente = (System.Int32)dataRow["idCliente"];
                if (dataRow["idTipoAnuncio"] != null)
                    idTipoAnuncio = (System.Int32)dataRow["idTipoAnuncio"];
                if (dataRow["idSubTipoAnuncio"] != null)
                    idSubTipoAnuncio = (System.Int32)dataRow["idSubTipoAnuncio"];
                if (dataRow["mostrados"] != null)
                    mostrados = (System.Int32)dataRow["mostrados"];
                if (dataRow["mapa"] != null)
                    mapa = (System.String)dataRow["mapa"];
                if (dataRow["idContrato"] != null)
                    idContrato = (System.Int32)dataRow["idContrato"];
                if (dataRow["idDominio"] != null)
                    idDominio = (System.Int32)dataRow["idDominio"];
                if (dataRow["video"] != null)
                    video = (System.String)dataRow["video"];
                if (dataRow["idPromotor"] != null)
                    idPromotor = (System.Int32)dataRow["idPromotor"];
                if (dataRow["precio"] != null)
                    precio = (System.Decimal)dataRow["precio"];
                if (dataRow["idMarca"] != null)
                    idMarca = (System.Int32)dataRow["idMarca"];
                if (dataRow["idModelo"] != null)
                    idModelo = (System.Int32)dataRow["idModelo"];
                if (dataRow["ano"] != null)
                    ano = (System.Int32)dataRow["ano"];
                if (dataRow["vestiduras"] != null)
                    vestiduras = (System.String)dataRow["vestiduras"];
                if (dataRow["idComunidad"] != null)
                    IdComunidad = (System.Int32)dataRow["idComunidad"];
                if (dataRow["lat"] != null)
                    Latitud = (System.Double)dataRow["lat"];
                if (dataRow["lon"] != null)
                    Longitud = (System.Double)dataRow["lon"];
                if (dataRow["idLogotipo"] != null)
                    idLogotipo = (System.Int32)dataRow["idLogotipo"];
                if (dataRow["facebook"] != null)
                    facebook = (System.String)dataRow["facebook"];
                if (dataRow["twitter"] != null)
                    twitter = (System.String)dataRow["twitter"];
            }

        }

        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE ANUNCIO set "); strCommand.Append("fechaModificacion='" + this.fechaModificacion.ToString("yyyy-MM-dd HH:mm:ss") + "'"); strCommand.Append(",idUsuarioModificacion=\"" + idUsuarioModificacion.ToString() + "\"");

            strCommand.Append(",GUID=\"" + GUID.ToString() + "\"");
            strCommand.Append(",URL=\"" + WLMFunctions.comillas(URL) + "\"");
            strCommand.Append(",nombre=\"" + WLMFunctions.comillas(nombre) + "\"");
            strCommand.Append(",direccion=\"" + WLMFunctions.comillas(direccion) + "\"");
            strCommand.Append(",colonia=\"" + WLMFunctions.comillas(colonia) + "\"");
            strCommand.Append(",municipio=\"" + WLMFunctions.comillas(municipio) + "\"");
            strCommand.Append(",estado=\"" + WLMFunctions.comillas(estado) + "\"");
            strCommand.Append(",CP=\"" + WLMFunctions.comillas(CP) + "\"");
            strCommand.Append(",telefono=\"" + WLMFunctions.comillas(telefono) + "\"");
            strCommand.Append(",fax=\"" + WLMFunctions.comillas(fax) + "\"");
            strCommand.Append(",email=\"" + WLMFunctions.comillas(email) + "\"");
            strCommand.Append(",website=\"" + WLMFunctions.comillas(website) + "\"");
            strCommand.Append(",horario=\"" + WLMFunctions.comillas(horario) + "\"");
            strCommand.Append(",descripcionMini=\"" + WLMFunctions.comillas(descripcionMini) + "\"");
            strCommand.Append(",descripcionCompleta=\"" + WLMFunctions.comillas(descripcionCompleta) + "\"");
            strCommand.Append(",comentarios='" + comentarios.ToString() + "'");
            strCommand.Append(",activo='" + Convert.ToInt16(activo) + "'");
            strCommand.Append(",pagadoHasta='" + PagadoHasta.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",idImagen='" + idImagen.ToString() + "'");
            strCommand.Append(",admitirComentarios='" + Convert.ToInt16(admitirComentarios) + "'");
            strCommand.Append(",idCliente='" + idCliente.ToString() + "'");
            strCommand.Append(",idTipoAnuncio='" + idTipoAnuncio.ToString() + "'");
            strCommand.Append(",idSubTipoAnuncio='" + idSubTipoAnuncio.ToString() + "'");
            strCommand.Append(",mostrados='" + mostrados.ToString() + "'");
            strCommand.Append(",mapa=\"" + WLMFunctions.comillas(mapa) + "\"");
            strCommand.Append(",idContrato='" + idContrato.ToString() + "'");
            strCommand.Append(",idDominio='" + idDominio.ToString() + "'");
            strCommand.Append(",video=\"" + WLMFunctions.comillas(video) + "\"");
            strCommand.Append(",idPromotor='" + idPromotor.ToString() + "'");
            strCommand.Append(",precio=\"" + precio + "\"");
            strCommand.Append(",idMarca='" + idMarca.ToString() + "'");
            strCommand.Append(",idModelo='" + idModelo.ToString() + "'");
            strCommand.Append(",ano='" + ano.ToString() + "'");
            strCommand.Append(",vestiduras=\"" + WLMFunctions.comillas(vestiduras) + "\"");
            strCommand.Append(",idComunidad='" + IdComunidad.ToString() + "'");
            strCommand.Append(",lat='" +  Latitud.ToString() + "'");
            strCommand.Append(",lon='" + Longitud.ToString() + "'");
            strCommand.Append(",idLogotipo='" + idLogotipo.ToString() + "'");
            strCommand.Append(",facebook=\"" + WLMFunctions.comillas(facebook) + "\"");
            strCommand.Append(",twitter=\"" + WLMFunctions.comillas(twitter) + "\"");
            strCommand.Append(" WHERE id='" + id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    [XmlType("ResultadoBusqueda")]
    public class AnuncioCollection
    {
        public List<Anuncio> Anuncios { get; set; }
        private string _cosa = "ninguna";
        [XmlAttribute()]
        public string Busqueda {get;set; }
        [XmlAttribute()]
        public String DominioActual {get;set;  }
        public AnuncioCollection()
        {
        }

        public AnuncioCollection(ref dbConnector ConexionDB)
        {

            string strCommand = "SELECT id FROM ANUNCIO WHERE Activo='1' ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            // _Elementos = new List<DeMexicoAnuncio>();
            while (dataReader.Read())
            {
                Anuncio newItem = new Anuncio(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
                Anuncios.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }


        //public void ArrayFill(string strCommand)
        //{
        //    OdbcDataAdapter da = new OdbcDataAdapter(strCommand,ConexionDBInterna.connector);

        //    DataTable table = new DataTable();
        //    da.Fill(table);
        //    items.Clear();


        //    foreach (DataRow dataRow in table.Rows)
        //    {
        //        DeMexicoAnuncio newItem = new DeMexicoAnuncio(dataRow,ref ConexionDBInterna);

        //        if(!_items.Contains(newItem))
        //        Elementos.Add(newItem);
        //    }
        //}


        public AnuncioCollection(int CantidadRegistros, ref dbConnector ConexionDB)
        {

            //string strCommand = "SELECT A.id FROM ANUNCIO A LEFT JOIN ANUNCIO2DOMINIO D ON D.idAnuncio=A.id  WHERE D.idDominio='" + DeCurrentDomain.IdentificadorDominio + "' AND Activo='1' ORDER BY RAND() LIMIT " + CantidadRegistros + " ";

            //OdbcDataReader dataReader = ConexionDBInterna.ExecuteReader(strCommand);
            ////_Elementos = new List<DeMexicoAnuncio>();
            //while (dataReader.Read())
            //{
            //    if (!_items.Contains(Convert.ToInt32(dataReader["id"])))
            //    {
            //        DeMexicoAnuncio newItem = new DeMexicoAnuncio(Convert.ToInt32(dataReader["id"]),ref ConexionDB);

            //        Elementos.Add(newItem);
            //    }
            //}
            //dataReader.Close();
            //dataReader.Dispose();
            string strCommand = "SELECT distinct A.* FROM ANUNCIO A LEFT  " +
                "JOIN ANUNCIO2DOMINIO D ON D.idAnuncio=A.id   " +
                "WHERE D.idDominio='" + DeCurrentDomain.IdentificadorDominio + "'  " +
                    "AND Activo='1'  " +
                "ORDER BY idTipoAnuncio DESC,RAND() LIMIT " + CantidadRegistros + " ";

            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);

            DataTable table = new DataTable();
            da.Fill(table);
            Anuncios = new List<Anuncio>();
            Anuncios.Clear();



            foreach (DataRow dataRow in table.Rows)
            {
                //if (!_items2.Contains((System.Int32)dataRow["id"]))
                //{

                Anuncio newItem = new Anuncio(dataRow, ref ConexionDB);
                //newItem.PopularListasXML();
                Anuncios.Add(newItem);

                //}
            }

            table.Dispose();
            da.Dispose();


        }

        public AnuncioCollection(Categoria Categoria, int CantidadRegistros, ref dbConnector ConexionDB)
        {

            string strCommand = "SELECT A.* FROM DIRECTORIOCAT2DIR C  " +
                "LEFT JOIN ANUNCIO A ON A.id=C.idDir  " +
                "LEFT JOIN ANUNCIO2DOMINIO D ON D.idAnuncio=A.id  " +
                " WHERE D.idDominio='" + DeCurrentDomain.IdentificadorDominio + "'  " +
                    "AND C.idCat='" + Categoria.id + "'  " +
                    "AND Activo='1'  " +
                "ORDER BY idTipoAnuncio DESC,RAND() LIMIT " + CantidadRegistros + " ";
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);

            DataTable table = new DataTable();
            da.Fill(table);
            Anuncios = new List<Anuncio>();
            Anuncios.Clear();


            foreach (DataRow dataRow in table.Rows)
            {
                //if (!_items.Contains((System.Int32)dataRow["id"]))
                //{

                Anuncio newItem = new Anuncio(dataRow, ref ConexionDB);
                Anuncios.Add(newItem);

                //}
            }

            table.Dispose();
            da.Dispose();
        }

        public AnuncioCollection(Tag Tag, int CantidadRegistros, ref dbConnector ConexionDB)
        {

            string strCommand = "SELECT A.* FROM DIRECTORIOTAG2DIR T  " +
                "LEFT JOIN ANUNCIO A ON A.id=T.idDir  " +
                "LEFT JOIN ANUNCIO2DOMINIO D ON D.idAnuncio=A.id   " +
                "WHERE D.idDominio='" + DeCurrentDomain.IdentificadorDominio + "'  " +
                    "AND T.idTag='" + Tag.id + "'  " +
                    "AND Activo='1'  " +
                "ORDER BY idTipoAnuncio DESC,RAND() LIMIT " + CantidadRegistros + " ";
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);

            DataTable table = new DataTable();
            da.Fill(table);
            Anuncios = new List<Anuncio>();
            Anuncios.Clear();


            foreach (DataRow dataRow in table.Rows)
            {
                //if (!_items.Contains((System.Int32)dataRow["id"]))
                //{

                Anuncio newItem = new Anuncio(dataRow, ref ConexionDB);
                Anuncios.Add(newItem);

                //}
            }

            table.Dispose();
            da.Dispose();
        }

        public AnuncioCollection(string CadenaBusqueda, int CantidadRegistros, ref dbConnector ConexionDB)
        {
            string[] cadenas= CadenaBusqueda.Split(' ');
            StringBuilder busquedas = new StringBuilder();
            int x = 0;
            foreach (string cadena in cadenas)
            {
                x++;
                busquedas.Append("(A.nombre LIKE '%" + cadena + "%'" +
                    " OR A.direccion LIKE '%" + cadena + "%'" +
                    " OR A.colonia LIKE '%" + cadena + "%'" +
                    " OR A.municipio LIKE '%" + cadena + "%'" +
                    " OR A.estado LIKE '%" + cadena + "%'" +
                    " OR A.telefono LIKE '%" + cadena + "%'" +
                    " OR A.descripcionMini LIKE '%" + cadena + "%'" +
                    " OR DC.nombreCategoria LIKE '%" + cadena + "%'" +
                    " OR DT.nombreTag LIKE '%" + cadena + "%')");
                if (x < cadenas.Length)
                {
                    busquedas.Append(" OR ");
                }
            }
            string strCommand = "SELECT DISTINCT A.* FROM ANUNCIO A "+
                "LEFT JOIN ANUNCIO2DOMINIO D ON D.idAnuncio=A.id  " +
                "LEFT JOIN DIRECTORIOCAT2DIR C2D ON C2D.idDir=A.id  " +
                "LEFT JOIN DIRECTORIOCATS DC ON DC.id=C2D.idCat  " +
                "LEFT JOIN DIRECTORIOTAG2DIR T2D ON T2D.idDir=A.id  " +
                "LEFT JOIN DIRECTORIOTAGS DT ON DT.id=T2D.idTag  " +
                "WHERE D.idDominio='" + DeCurrentDomain.IdentificadorDominio +"'  " +
                    "AND (" + busquedas.ToString() + ")  " +
                    "AND Activo='1'  " +
                "ORDER BY idTipoAnuncio DESC,RAND() LIMIT " + CantidadRegistros + " ";
            
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);

            DataTable table = new DataTable();
            da.Fill(table);
            Anuncios = new List<Anuncio>();
            Anuncios.Clear();


            foreach (DataRow dataRow in table.Rows)
            {
                //if (!_items.Contains((System.Int32)dataRow["id"]))
                //{

                Anuncio newItem = new Anuncio(dataRow, ref ConexionDB);
                Anuncios.Add(newItem);

                //}
            }

            table.Dispose();
            da.Dispose();
        }

        public AnuncioCollection(Cliente cliente, int CantidadRegistros,string tipoAnuncios, ref dbConnector ConexionDB)
        {
            string wtipo = "";
            if (tipoAnuncios != null)
            {
                switch (tipoAnuncios)
                {
                    case "destacados":
                        wtipo = " AND idTipoAnuncio=2 ";
                        break;
                    case "porvencer":
                        wtipo = " AND idTipoAnuncio=2 AND pagadoHasta<'"+DateTime.Now.AddDays(15).ToString("yyyy-MM-dd")+"'";
                        break;
                    default:
                        wtipo = " AND idTipoAnuncio=1 ";
                        break;
                }
            }
            string strCommand = "SELECT A.* FROM ANUNCIO A  " +
                "WHERE idCliente='" + cliente.id + "' " +wtipo +
                "AND Activo='1' ORDER BY idTipoAnuncio DESC,RAND() LIMIT " + CantidadRegistros + " ";
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);

            DataTable table = new DataTable();
            da.Fill(table);
            Anuncios = new List<Anuncio>();
            Anuncios.Clear();


            foreach (DataRow dataRow in table.Rows)
            {
                //if (!_items.Contains((System.Int32)dataRow["id"]))
                //{

                Anuncio newItem = new Anuncio(dataRow, ref ConexionDB);
                Anuncios.Add(newItem);

                // }
            }

            table.Dispose();
            da.Dispose();
        }

        public AnuncioCollection(MiWebSiteUser usuario, int CantidadRegistros, ref dbConnector ConexionDB)
        {

            string strCommand;
            if (usuario.nivelUsuario >= 6)
                strCommand = "SELECT A.* FROM ANUNCIO A WHERE idUsuario='" + usuario.id + "' AND Activo='1' LIMIT " + CantidadRegistros + " ";
            else
                strCommand = "SELECT A.* FROM ANUNCIO A WHERE Activo='1' LIMIT " + CantidadRegistros + " ";
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);

            DataTable table = new DataTable();
            da.Fill(table);
            Anuncios = new List<Anuncio>();
            Anuncios.Clear();


            foreach (DataRow dataRow in table.Rows)
            {
                //if (!_items2.Contains((System.Int32)dataRow["id"]))
                //{

                Anuncio newItem = new Anuncio(dataRow, ref ConexionDB);
                Anuncios.Add(newItem);

                // }
            }

            table.Dispose();
            da.Dispose();
        }
        
        public AnuncioCollection(double latitud, double longitud,double radio, int CantidadRegistros, ref dbConnector ConexionDB)
        {

            string strCommand;
            radio = radio/1000;
            strCommand = "SELECT ANUNCIO.*, ( 6371 * acos( cos( radians(" + latitud + ") ) * cos( radians( lat ) ) * cos( radians( lon ) - radians(" + longitud + ") ) + sin( radians(" + latitud + ") ) * sin( radians( lat ) ) ) ) AS distance FROM ANUNCIO HAVING distance < " + radio + " ORDER BY idtipoAnuncio DESC,distance LIMIT " + CantidadRegistros + " ";
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);

            DataTable table = new DataTable();
            da.Fill(table);
            Anuncios = new List<Anuncio>();
            Anuncios.Clear();


            foreach (DataRow dataRow in table.Rows)
            {
                //if (!_items2.Contains((System.Int32)dataRow["id"]))
                //{

                Anuncio newItem = new Anuncio(dataRow, ref ConexionDB);
                Anuncios.Add(newItem);

                // }
            }

            table.Dispose();
            da.Dispose();
        }

        public string PortadaListado(string Plantilla)
        {
            StringBuilder salida = new StringBuilder();
            foreach (Anuncio Anuncio in Anuncios)
            {
                if (Anuncio.idTipoAnuncio > 1)
                {
                    string DetalleAnuncio = Plantilla.ToString();
                    DetalleAnuncio = DetalleAnuncio.Replace("{NOMBRE}", Anuncio.nombre);
                    if (HttpContext.Current.Request.Browser.IsMobileDevice)
                        if (Anuncio.descripcionMini.Length >= 100)
                            DetalleAnuncio = DetalleAnuncio.Replace("{DESCRIPCION}", Anuncio.descripcionMini.Substring(0, 100) + "...");
                        else
                            DetalleAnuncio = DetalleAnuncio.Replace("{DESCRIPCION}", Anuncio.descripcionMini);
                    else
                        DetalleAnuncio = DetalleAnuncio.Replace("{DESCRIPCION}", Anuncio.descripcionMini);
                    DetalleAnuncio = DetalleAnuncio.Replace("{URLANUNCIO}", "/" + Anuncio.URL);
                    if (Anuncio.idTipoAnuncio != 0)
                        DetalleAnuncio = DetalleAnuncio.Replace("{URLIMAGEN}", Anuncio.Logotipo.GetThumbNail(120));
                    DetalleAnuncio = DetalleAnuncio.Replace("{CATEGORIAS}", Anuncio.ListaCategorias);
                    DetalleAnuncio = DetalleAnuncio.Replace("{TAGS}", Anuncio.ListaTags);
                    salida.Append("\r\n" + DetalleAnuncio + "\r\n");
                }
                else
                {
                    salida.Append("<span>" + Anuncio.nombre + "</span><br>");
                }
            }

            return salida.ToString();
        }

        //public void PopularDatos()
        //{
        //    items2 = new List<DeMexicoAnuncio>();
        //    foreach (DeMexicoAnuncio anuncio in Elementos)
        //    {
        //        anuncio.PopularListasXML();
        //        Anuncios.Add(anuncio);
        //    }
        //}

        public string XMLFeed()
        {

            // PopularDatos();
            return WLMFunctions.ToXML(this);

        }

        //        public string XMLFeed()
        //        {
        //            StringBuilder salida = new StringBuilder();
        //            salida.Append(
        //                "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " +
        //"<rss version=\"2.0\" " +
        //    "xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" " +
        //    "xmlns:wfw=\"http://wellformedweb.org/CommentAPI/\" " +
        //    "xmlns:dc=\"http://purl.org/dc/elements/1.1/\" " +
        //    "xmlns:atom=\"http://www.w3.org/2005/Atom\" " +
        //    "xmlns:sy=\"http://purl.org/rss/1.0/modules/syndication/\" " +
        //    "xmlns:slash=\"http://purl.org/rss/1.0/modules/slash/\" " +
        //    ">" +
        //"<channel>" +
        //    "<title>" + ConfigurationManager.AppSettings["tituloWebSite"] + "</title>" +
        //    "<atom:link href=\"" + ConfigurationManager.AppSettings["siteURL"] + "feeds/\" rel=\"self\" type=\"application/rss+xml\" />" +
        //    "<link>" + ConfigurationManager.AppSettings["siteURL"] + "</link>" +
        //    "<description>" + ConfigurationManager.AppSettings["tituloWebSite"] + "</description>" +
        //    "<lastBuildDate>" + DateTime.Now.ToString("R") + " " + DateTime.Now.ToShortTimeString() + " </lastBuildDate>" +
        //    "<language>en</language>" +
        //    "<sy:updatePeriod>hourly</sy:updatePeriod>" +
        //    "<sy:updateFrequency>1</sy:updateFrequency>" +
        //    "<generator>MiWebSite Content Manager</generator>"

        //    );
        //            foreach (DeMexicoAnuncio entry in Elementos)
        //            {
        //                salida.Append("<item><title>" + SecurityElement.Escape(entry.nombre) + "</title>" +
        //        "<link>" + ConfigurationManager.AppSettings["siteURL"] + entry.URL + "</link>" +
        //        "<image>" + ConfigurationManager.AppSettings["siteURL"] + entry.Logotipo.URLImagen + "</image>" +
        //        "<comments>" + ConfigurationManager.AppSettings["siteURL"] + entry.URL + "#comentarios</comments>" +
        //        "<pubDate>" + entry.fechaCreacion.ToString("R") + "</pubDate>" +
        //        "<dc:creator>" + new MiWebSiteUser(entry.IdUsuario,ref ConexionDB).username + "</dc:creator>");
        //                foreach (DeMexicoCategoria categoria in entry.categorias)
        //                {
        //                    salida.Append("<category><![CDATA[" + SecurityElement.Escape(categoria.nombreCategoria) + "]]></category>");
        //                }

        //                foreach (DeMexicoTag tag in entry.tags)
        //                {
        //                    salida.Append("<tag><![CDATA[" +SecurityElement.Escape( tag.nombreTag )+ "]]></tag>");
        //                }

        //                salida.Append("<guid isPermaLink=\"false\">" + ConfigurationManager.AppSettings["siteURL"] + entry.URL + "</guid>" +
        //        "<description><![CDATA[" + SecurityElement.Escape(entry.descripcionMini.Replace("\n","")) + "[...]]]></description>" +
        //            "<content:encoded><![CDATA[" +SecurityElement.Escape( entry.descripcionMini.Replace("\n", "")) + "]]></content:encoded>" +
        //            "<wfw:commentRss>" + ConfigurationManager.AppSettings["siteURL"] + entry.URL + "/feed</wfw:commentRss>" +
        //        "<slash:comments>" + entry.comentarios + "</slash:comments>" +
        //        "</item>");
        //            }

        //            salida.Append("</channel></rss>");
        //            return salida.ToString();
        //        }
    }

    public class AnuncioTipo : BaseClass
    {


        #region public properties
        public String NombreTipoAnuncio {get;set; }
        #endregion

        #region constructors
        public AnuncioTipo(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("ANUNCIOTIPOS");
            string queryString = "";
            queryString = "SELECT * FROM ANUNCIOTIPOS WHERE id='" + id + "'";
            GetRecord(queryString);
        }

        public AnuncioTipo(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM ANUNCIOTIPOS WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }
        #endregion

        #region public methods


        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM ANUNCIOTIPOS WHERE id='" + id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion


        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                    fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]); if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion"))) fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]); if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion"))) idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];


                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("NombreTipoAnuncio")))
                    NombreTipoAnuncio = (System.String)reader["NombreTipoAnuncio"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE ANUNCIOTIPOS set "); strCommand.Append("fechaModificacion='" + this.fechaModificacion.ToString("yyyy-MM-dd HH:mm:ss") + "'"); strCommand.Append(",idUsuarioModificacion=\"" + idUsuarioModificacion.ToString() + "\"");

            strCommand.Append(",NombreTipoAnuncio=\"" + WLMFunctions.comillas(NombreTipoAnuncio) + "\"");
            strCommand.Append(" WHERE id='" + id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class AnuncioTipoCollection
    {


        public List<AnuncioTipo> Elementos { get; set; }
        public AnuncioTipoCollection()
        {
        }
        public AnuncioTipoCollection(ref dbConnector ConexionDB)
        {
            
            string strCommand = "SELECT id FROM ANUNCIOTIPOS ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<AnuncioTipo>();
            while (dataReader.Read())
            {
                AnuncioTipo newItem = new AnuncioTipo(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
                Elementos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }
    }

    public class Anuncio2dominio : BaseClass
    {


        #region public properties
        public int idAnuncio {get;set; }
        public int idDominio {get;set; }
        #endregion

        #region constructors
        public Anuncio2dominio(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("ANUNCIO2DOMINIO");
            string queryString = "";
            queryString = "SELECT * FROM ANUNCIO2DOMINIO WHERE id='" + id + "'";
            GetRecord(queryString);
        }

        public Anuncio2dominio(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM ANUNCIO2DOMINIO WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }
        #endregion

        #region public methods


        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM ANUNCIO2DOMINIO WHERE id='" + id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion


        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                    fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]); if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion"))) fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]); if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion"))) idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];


                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idAnuncio")))
                    idAnuncio = (System.Int32)reader["idAnuncio"];
                if (!reader.IsDBNull(reader.GetOrdinal("idDominio")))
                    idDominio = (System.Int32)reader["idDominio"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE ANUNCIO2DOMINIO set "); strCommand.Append("fechaModificacion='" + this.fechaModificacion.ToString("yyyy-MM-dd HH:mm:ss") + "'"); strCommand.Append(",idUsuarioModificacion=\"" + idUsuarioModificacion.ToString() + "\"");

            strCommand.Append(",idAnuncio='" + idAnuncio.ToString() + "'");
            strCommand.Append(",idDominio='" + idDominio.ToString() + "'");
            strCommand.Append(" WHERE id='" + id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class Anuncio2dominioCollection
    {
        public List<Anuncio2dominio> Elementos {get;set; }
        public Anuncio2dominioCollection()
        {
        }
        public Anuncio2dominioCollection(ref dbConnector ConexionDB)
        {

            string strCommand = "SELECT id FROM ANUNCIO2DOMINIO ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<Anuncio2dominio>();
            while (dataReader.Read())
            {
                Anuncio2dominio newItem = new Anuncio2dominio(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
                Elementos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }

        public Anuncio2dominioCollection(Anuncio anuncio, ref dbConnector ConexionDB)
        {

            string strCommand = "SELECT id FROM ANUNCIO2DOMINIO WHERE idAnuncio='" + anuncio.id + "'";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<Anuncio2dominio>();
            while (dataReader.Read())
            {
                Anuncio2dominio newItem = new Anuncio2dominio(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
                Elementos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }


    }

    [XmlType("Tag")]
    public class Tag : BaseClass
    {

        #region public properties
        [XmlAttribute("nombre")]
        public String nombreTag {get;set; }
        [XmlAttribute()]
        public String SystemName {get;set; }
      
        public Dominiotagcatsuma Suma
        {
           get;set;
    
        }
        private string _inicialCategoria;
        [XmlAttribute()]
        public string InicialCategoria
        {
           get;set;

        }
        #endregion

        #region constructors
        public Tag()
        {
        }

        public Tag(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDBInterna);
            id = classBinder.NewRecord("DIRECTORIOTAGS");
            string queryString = "";
            queryString = "SELECT * FROM DIRECTORIOTAGS WHERE id=\"" + id + "\"";
            GetRecord(queryString);
        }

        public Tag(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM DIRECTORIOTAGS WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }

        public Tag(int registryId,bool suma, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM DIRECTORIOTAGS WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
            Suma = new Dominiotagcatsuma(DeCurrentDomain.IdentificadorDominio, this, ref ConexionDB);
        }

        public Tag(DataRow datarow, ref dbConnector ConexionDB)
        {
            this.GetRecord(datarow);
        }

        public Tag(string tagName, bool isSystemName, ref dbConnector ConexionDB)
        {
            //HttpContext.Current.Response.Write(tagName);
            //HttpContext.Current.Response.End();
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            if (isSystemName)
                queryString = "SELECT * FROM DIRECTORIOTAGS WHERE systemName='" + tagName + "'";
            else
                queryString = "SELECT * FROM DIRECTORIOTAGS WHERE nombreTag='" + tagName + "'";

            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }
        #endregion

        #region public methods

        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM DIRECTORIOTAGS WHERE id=\"" + id + "\"";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion

        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                    fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]); if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion"))) fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]); if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion"))) idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];


                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("nombreTag")))
                    nombreTag = (System.String)reader["nombreTag"];
                if (!reader.IsDBNull(reader.GetOrdinal("systemName")))
                    SystemName = (System.String)reader["systemName"];
            }
        }

        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                if (dataRow["id"] != null)
                    id = (System.Int32)dataRow["id"];
                if (dataRow["fechaCreacion"] != null)
                    fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
                if (dataRow["fechaModificacion"] != null)
                    fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
                if (dataRow["idUsuario"] != null)
                    idUsuario = (System.Int32)dataRow["idUsuario"];
                if (dataRow["idUsuarioModificacion"] != null)
                    idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
                if (dataRow["nombreTag"] != null)
                    nombreTag = (System.String)dataRow["nombreTag"];
                if (dataRow["systemName"] != null)
                    SystemName = (System.String)dataRow["systemName"];
            }
        }

        protected override void UpdateBind()
        {
            SystemName = MiWebSiteFunctions.tituloaPostName(nombreTag);
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE DIRECTORIOTAGS set "); strCommand.Append("fechaModificacion='" + this.fechaModificacion.ToString("yyyy-MM-dd HH:mm:ss") + "'"); strCommand.Append(",idUsuarioModificacion=\"" + idUsuarioModificacion.ToString() + "\"");

            strCommand.Append(",nombreTag=\"" + nombreTag.ToString() + "\"");
            strCommand.Append(",systemName=\"" + SystemName.ToString() + "\"");
            strCommand.Append(" WHERE id=\"" + id + "\"");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    [Serializable]
    [XmlType("ListaTags")]
    public class TagCollection
    {


        private int OrdenarAlfabeticamente(string x, string y)
        {
            if (x == null)
            {
                if (y == null)
                {
                    // If x is null and y is null, they're
                    // equal. 
                    return 0;
                }
                else
                {
                    // If x is null and y is not null, y
                    // is greater. 
                    return -1;
                }
            }
            else
            {
                // If x is not null...
                //
                if (y == null)
                // ...and y is null, x is greater.
                {
                    return 1;
                }
                else
                {
                    // ...and y is not null, compare the 
                    // lengths of the two strings.
                    //
                    int retval = x.Length.CompareTo(y.Length);

                    if (retval != 0)
                    {
                        // If the strings are not of equal length,
                        // the longer string is greater.
                        //
                        return retval;
                    }
                    else
                    {
                        // If the strings are of equal length,
                        // sort them with ordinary string comparison.
                        //
                        return x.CompareTo(y);
                    }
                }
            }
        }

        [XmlElement("Tag")]
        public List<Tag> Elementos {get;set; }

        public TagCollection()
        {
        }

        public TagCollection(ref dbConnector ConexionDB)
        {
            string strCommand = "SELECT id FROM DIRECTORIOTAGS order by nombreTag";

            OdbcDataReader reader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<Tag>();
            string inicial="1";
            while (reader.Read())
            {
                Tag newEntry = new Tag(Convert.ToInt32(reader["id"]),true, ref ConexionDB);
                if(newEntry.nombreTag!=null)
                    if(newEntry.nombreTag.Length>0)
                        if (inicial != newEntry.nombreTag[0].ToString().ToUpper())
                        {
                            newEntry.InicialCategoria = newEntry.nombreTag.Substring(0, 1).ToUpper();
                            inicial = newEntry.nombreTag.Substring(0, 1).ToUpper();
                        }
                Elementos.Add(newEntry);
            }
            reader.Close();
            reader.Dispose();
        }

        public TagCollection(Anuncio directoryEntry, ref dbConnector ConexionDB)
        {
            //string strCommand = "SELECT T.id FROM DIRECTORIOTAGS T left join DIRECTORIOTAG2DIR D on D.idTag=T.id WHERE D.idDir='" + directoryEntry.id + "' order by nombreTag";

            //OdbcDataReader reader = ConexionDBInterna.ExecuteReader(strCommand);
            Elementos = new List<Tag>();
            //while (reader.Read())
            //{
            //    DeMexicoTag newEntry = new DeMexicoTag(Convert.ToInt32(reader["id"]),ref ConexionDB);


            //    Elementos.Add(newEntry);
            //}
            //reader.Close();
            //reader.Dispose();
            string strCommand = "SELECT T.* FROM DIRECTORIOTAGS T left join DIRECTORIOTAG2DIR D on D.idTag=T.id WHERE D.idDir='" + directoryEntry.id + "' order by nombreTag";
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);
            DataTable table = new DataTable();
            da.Fill(table);
            Elementos.Clear();


            foreach (DataRow dataRow in table.Rows)
            {
                //if (!_items.Contains((System.Int32)dataRow["id"]))
                //{

                Tag newItem = new Tag(dataRow, ref ConexionDB);
                Elementos.Add(newItem);

                //}
            }

            table.Dispose();
            da.Dispose();
        }

        public TagCollection(string buscar, ref dbConnector ConexionDB)
        {
            Elementos = new List<Tag>();
            string strCommand = "SELECT DISTINCT T.* FROM DIRECTORIOTAGS T left join DIRECTORIOTAG2DIR D on D.idTag=T.id WHERE T.nombreTag like '%" + buscar+ "%' order by nombreTag";
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);
            DataTable table = new DataTable();
            da.Fill(table);
            Elementos.Clear();


            foreach (DataRow dataRow in table.Rows)
            {
                Tag newItem = new Tag(dataRow, ref ConexionDB);
                Elementos.Add(newItem);
            }

            table.Dispose();
            da.Dispose();
        }
    }

    [XmlType("Categoria")]
    public class Categoria : BaseClass
    {
      

        #region public properties
        [XmlAttribute("nombre")]
        public String nombreCategoria {get;set; }
        [XmlAttribute()]
        public String SystemName {get;set; }


        public Dominiotagcatsuma Suma
        {
           get;set;
     
        }
    
        [XmlAttribute()]
        public string InicialCategoria
        {
           get;set;
         
        }
        #endregion

        #region constructors
        public Categoria()
        {
        }

        

        public Categoria(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("DIRECTORIOCATS");
            string queryString = "";
            queryString = "SELECT * FROM DIRECTORIOCATS WHERE id=\"" + id + "\"";
            GetRecord(queryString);
        }

        public Categoria(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM DIRECTORIOCATS WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDBInterna);
            this.GetRecord(queryString);
        }

        public Categoria(int registryId,bool cargarsuma, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM DIRECTORIOCATS WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDBInterna);
            this.GetRecord(queryString);
            
            Suma = new Dominiotagcatsuma(DeCurrentDomain.IdentificadorDominio, this, ref ConexionDBInterna);
        }

        public Categoria(DataRow dataRow, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
        }

        public Categoria(string categoryName, bool isSystemName, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            if (isSystemName)
                queryString = "SELECT * FROM DIRECTORIOCATS WHERE systemName='" + categoryName + "'";
            else
                queryString = "SELECT * FROM DIRECTORIOCATS WHERE nombreCategoria='" + categoryName + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDBInterna);
            this.GetRecord(queryString);
        }
        #endregion

        #region public methods

        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM DIRECTORIOCATS WHERE id=\"" + id + "\"";
            ConexionDBInterna.ExecuteCommand(queryString);

        }

        public int TotalRegistros()
        {
            string queryString = "";
            queryString = "select ifnull((select sum(1) FROM DIRECTORIOCAT2DIR WHERE idCat=\"" + id + "\"),0) as total";
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                return Convert.ToInt32(reader["total"]);
            }
            else
                return 0;
        }
        #endregion

        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                    fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]); if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion"))) fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]); if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion"))) idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];


                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("nombreCategoria")))
                    nombreCategoria = (System.String)reader["nombreCategoria"];
                if (!reader.IsDBNull(reader.GetOrdinal("systemName")))
                    SystemName = (System.String)reader["systemName"];
            }
        }


        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                if (dataRow["id"] != null)
                    id = (System.Int32)dataRow["id"];
                if (dataRow["fechaCreacion"] != null)
                    fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
                if (dataRow["fechaModificacion"] != null)
                    fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
                if (dataRow["idUsuario"] != null)
                    idUsuario = (System.Int32)dataRow["idUsuario"];
                if (dataRow["idUsuarioModificacion"] != null)
                    idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
                if (dataRow["nombreCategoria"] != null)
                    nombreCategoria = (System.String)dataRow["nombreCategoria"];
                if (dataRow["systemName"] != null)
                    SystemName = (System.String)dataRow["systemName"];
            }
        }

        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE DIRECTORIOCATS set "); strCommand.Append("fechaModificacion='" + this.fechaModificacion.ToString("yyyy-MM-dd HH:mm:ss") + "'"); strCommand.Append(",idUsuarioModificacion=\"" + idUsuarioModificacion.ToString() + "\"");

            strCommand.Append(",nombreCategoria=\"" + nombreCategoria.ToString() + "\"");
            strCommand.Append(",systemName=\"" + SystemName.ToString() + "\"");
            strCommand.Append(" WHERE id=\"" + id + "\"");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    [Serializable]
    [XmlType("ListaCategorias")]
    public class CategoriaCollection
    {


        [XmlElement("Categoria")]
        public List<Categoria> Elementos {get;set; }

        public CategoriaCollection()
        {
        }

        public CategoriaCollection(ref dbConnector ConexionDB)
        {
            string strCommand = "select id FROM DIRECTORIOCATS order by nombreCategoria;";

            //conector.ExecuteCommand("truncate catTemp;");
            //conector.ExecuteCommand("insert catTemp SELECT id,nombreCategoria,systemName FROM DIRECTORIOCATS WHERE systemname<>'' order by rand() limit 30;");
            OdbcDataReader reader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<Categoria>();
            string inicial = "1";
            while (reader.Read())
            {
                Categoria newEntry = new Categoria(Convert.ToInt32(reader["id"]),true, ref ConexionDB);
                if(inicial!=newEntry.nombreCategoria[0].ToString().ToUpper())
                {
                    newEntry.InicialCategoria = newEntry.nombreCategoria.Substring(0, 1).ToUpper();
                    inicial = newEntry.nombreCategoria.Substring(0,1).ToUpper();
                }
                Elementos.Add(newEntry);
            }
            reader.Close();
            reader.Dispose();
        }

        public CategoriaCollection(Random random, ref dbConnector ConexionDB)
        {
            string strCommand = "(select * from directoriocats order by rand() limit 30)order by systemName ;";
            //conector.ExecuteCommand("truncate catTemp;");
            //conector.ExecuteCommand("insert catTemp SELECT id,nombreCategoria,systemName FROM DIRECTORIOCATS WHERE systemname<>'' order by rand() limit 30;");
            //OdbcDataReader reader = ConexionDBInterna.ExecuteReader(strCommand);
            Elementos = new List<Categoria>();
            //while (reader.Read())
            //{
            //    DeMexicoCategoria newEntry = new DeMexicoCategoria(Convert.ToInt32(reader["id"]),ref ConexionDB);

            //    Elementos.Add(newEntry);
            //}
            //reader.Close();
            //reader.Dispose();
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);

            DataTable table = new DataTable();
            da.Fill(table);
            Elementos.Clear();


            foreach (DataRow dataRow in table.Rows)
            {
                //if (!_items.Contains((System.Int32)dataRow["id"]))
                //{

                Categoria newItem = new Categoria(dataRow, ref ConexionDB);
                Elementos.Add(newItem);

                //}
            }

            table.Dispose();
            da.Dispose();
        }

        public CategoriaCollection(Anuncio directoryEntry, ref dbConnector ConexionDB)
        {
            //string strCommand = "SELECT C.id FROM DIRECTORIOCATS C left join DIRECTORIOCAT2DIR D on D.idCat=C.id WHERE D.idDir='"+directoryEntry.id+"' order by nombreCategoria";

            //OdbcDataReader reader = ConexionDBInterna.ExecuteReader(strCommand);
            Elementos = new List<Categoria>();
            //while (reader.Read())
            //{
            //    DeMexicoCategoria newEntry = new DeMexicoCategoria(Convert.ToInt32(reader["id"]),ref ConexionDB);

            //    Elementos.Add(newEntry);
            //}
            //reader.Close();
            //reader.Dispose();

            string strCommand = "SELECT C.* FROM DIRECTORIOCATS C left join DIRECTORIOCAT2DIR D on D.idCat=C.id WHERE D.idDir='" + directoryEntry.id + "' order by nombreCategoria";
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);

            DataTable table = new DataTable();
            da.Fill(table);
            Elementos.Clear();


            foreach (DataRow dataRow in table.Rows)
            {
                //if (!_items.Contains((System.Int32)dataRow["id"]))
                //{

                Categoria newItem = new Categoria(dataRow, ref ConexionDB);
                Elementos.Add(newItem);

                //}
            }

            table.Dispose();
            da.Dispose();
        }

        public CategoriaCollection(string buscarKeyWord, ref dbConnector ConexionDB)
        {
            Elementos = new List<Categoria>();
            string strCommand = "SELECT DISTINCT C.* FROM DIRECTORIOCATS C left join DIRECTORIOCAT2DIR D on D.idCat=C.id WHERE C.nombreCategoria like '%" + buscarKeyWord+ "%' order by nombreCategoria";
            OdbcDataAdapter da = new OdbcDataAdapter(strCommand, ConexionDB.connector);

            DataTable table = new DataTable();
            da.Fill(table);
            Elementos.Clear();

            foreach (DataRow dataRow in table.Rows)
            {
                Categoria newItem = new Categoria(dataRow, ref ConexionDB);
                Elementos.Add(newItem);
            }

            table.Dispose();
            da.Dispose();
        }
    }

    public class Tag2Add : BaseClass
    {
    

        #region public properties
        public int idDir {get;set; }
        public int idTag {get;set; }
        #endregion

        #region constructors
        public Tag2Add(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("DIRECTORIOTAG2DIR");
            string queryString = "";
            queryString = "SELECT * FROM DIRECTORIOTAG2DIR WHERE id=\"" + id + "\"";
            GetRecord(queryString);
        }

        public Tag2Add(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM DIRECTORIOTAG2DIR WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }
        #endregion

        #region public methods

        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM DIRECTORIOTAG2DIR WHERE id=\"" + id + "\"";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion


        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                    fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]); if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion"))) fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]); if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion"))) idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];


                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idDir")))
                    idDir = (System.Int32)reader["idDir"];
                if (!reader.IsDBNull(reader.GetOrdinal("idTag")))
                    idTag = (System.Int32)reader["idTag"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE DIRECTORIOTAG2DIR set "); strCommand.Append("fechaModificacion='" + this.fechaModificacion.ToString("yyyy-MM-dd HH:mm:ss") + "'"); strCommand.Append(",idUsuarioModificacion=\"" + idUsuarioModificacion.ToString() + "\"");

            strCommand.Append(",idDir=\"" + idDir.ToString() + "\"");
            strCommand.Append(",idTag=\"" + idTag.ToString() + "\"");
            strCommand.Append(" WHERE id=\"" + id + "\"");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class Cat2Add : BaseClass
    {


        #region public properties
        public int idDir {get;set; }
        public int idCat {get;set; }
        #endregion

        #region constructors
        public Cat2Add(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("DIRECTORIOCAT2DIR");
            string queryString = "";
            queryString = "SELECT * FROM DIRECTORIOCAT2DIR WHERE id=\"" + id + "\"";
            GetRecord(queryString);
        }

        public Cat2Add(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM DIRECTORIOCAT2DIR WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }
        #endregion

        #region public methods

        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM DIRECTORIOCAT2DIR WHERE id=\"" + id + "\"";
            ConexionDBInterna.ExecuteCommand(queryString);

        }


        #endregion


        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                    fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]); if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion"))) fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]); if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion"))) idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];


                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idDir")))
                    idDir = (System.Int32)reader["idDir"];
                if (!reader.IsDBNull(reader.GetOrdinal("idCat")))
                    idCat = (System.Int32)reader["idCat"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE DIRECTORIOCAT2DIR set "); strCommand.Append("fechaModificacion='" + this.fechaModificacion.ToString("yyyy-MM-dd HH:mm:ss") + "'"); strCommand.Append(",idUsuarioModificacion=\"" + idUsuarioModificacion.ToString() + "\"");

            strCommand.Append(",idDir=\"" + idDir.ToString() + "\"");
            strCommand.Append(",idCat=\"" + idCat.ToString() + "\"");
            strCommand.Append(" WHERE id=\"" + id + "\"");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class Dominiotagcatsuma : BaseClass
    {

        #region public properties
        [XmlIgnore()]
        public int idDominio {get;set; }
        [XmlIgnore()]
        public int idCategoria {get;set; }
        [XmlIgnore()]
        public int idTag {get;set; }
        [XmlAttribute("Suma")]
        public int Suma {get;set; }
        public int Total { get; set; }
        #endregion

        #region constructors
        public Dominiotagcatsuma() { }
        public Dominiotagcatsuma(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("DOMINIOTAGCATSUMA");
            string queryString = "";
            queryString = "SELECT * FROM DOMINIOTAGCATSUMA WHERE id='" + id + "'";
            GetRecord(queryString);
        }

        public Dominiotagcatsuma(int registryId,ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM DOMINIOTAGCATSUMA WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }

        public Dominiotagcatsuma(int iddominio, Categoria categoria, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM DOMINIOTAGCATSUMA WHERE idCategoria='" + categoria.id + "' AND idDominio='"+iddominio+"'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }

        public Dominiotagcatsuma(int iddominio, Tag tag, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM DOMINIOTAGCATSUMA WHERE idTag='" + tag.id + "' AND idDominio='" + iddominio + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }

        public Dominiotagcatsuma(DataRow dataRow,ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
        }
        #endregion

        #region public methods


        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM DOMINIOTAGCATSUMA WHERE id='" + id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion


        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                    fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
                    fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
                    idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
                if (!reader.IsDBNull(reader.GetOrdinal("idDominio")))
                    idDominio = (System.Int32)reader["idDominio"];
                if (!reader.IsDBNull(reader.GetOrdinal("idCategoria")))
                    idCategoria = (System.Int32)reader["idCategoria"];
                if (!reader.IsDBNull(reader.GetOrdinal("idTag")))
                    idTag = (System.Int32)reader["idTag"];
                if (!reader.IsDBNull(reader.GetOrdinal("total")))
                    Total = (System.Int32)reader["total"];
            }
        }


        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                if (dataRow["id"] != null)
                    id = (System.Int32)dataRow["id"];
                if (dataRow["fechaCreacion"] != null)
                    fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
                if (dataRow["fechaModificacion"] != null)
                    fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
                if (dataRow["idUsuario"] != null)
                    idUsuario = (System.Int32)dataRow["idUsuario"];
                if (dataRow["idUsuarioModificacion"] != null)
                    idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
                if (dataRow["idDominio"] != null)
                    idDominio = (System.Int32)dataRow["idDominio"];
                if (dataRow["idCategoria"] != null)
                    idCategoria = (System.Int32)dataRow["idCategoria"];
                if (dataRow["idTag"] != null)
                    idTag = (System.Int32)dataRow["idTag"];
                if (dataRow["total"] != null)
                    Total = (System.Int32)dataRow["total"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE DOMINIOTAGCATSUMA set ");
            strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",idUsuarioModificacion='" + idUsuarioModificacion.ToString() + "'");
            strCommand.Append(",idDominio='" + idDominio.ToString() + "'");
            strCommand.Append(",idCategoria='" + idCategoria.ToString() + "'");
            strCommand.Append(",idTag='" + idTag.ToString() + "'");
            strCommand.Append(",total='" + Total.ToString() + "'");
            strCommand.Append(" WHERE id='" + id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class DominiotagcatsumaCollection
    {
        private dbConnector ConexionDB;
    
        public BaseClassArray<Dominiotagcatsuma> Elementos {get;set; }
        public DominiotagcatsumaCollection()
        {
        }
        public DominiotagcatsumaCollection(ref dbConnector ConexionDB)
        {
            string strCommand = "SELECT id FROM DOMINIOTAGCATSUMA ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new BaseClassArray<Dominiotagcatsuma>();
            while (dataReader.Read())
            {
                Dominiotagcatsuma newItem = new Dominiotagcatsuma(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
                Elementos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }
    }
}

